package org.darkgem.imageloader;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.DisplayMetrics;
import org.darkgem.imageloader.displayer.BitmapDisplayer;
import org.darkgem.imageloader.displayer.SimpleBitmapDisplayer;

/**
 * 图片展示选项
 */
public class DisplayImageOptions {
    //加载的时候, 显示的图片
    //int imageResOnLoading = 0;
    //URI为空的时候, 显示的图片
    int imageResForEmptyUri;
    //加载失败的时候, 显示的图片
    //int imageResOnFail = 0;
    //是否保存到内存中
    boolean cacheInMemory;
    //图片大小
    int width;
    //图片大小
    int height;
    //默认图片质量
    Bitmap.Config config;
    //展示器
    BitmapDisplayer displayer;

    private DisplayImageOptions(int imageResForEmptyUri, boolean cacheInMemory, int width, int height, Bitmap.Config config, BitmapDisplayer displayer) {
        this.imageResForEmptyUri = imageResForEmptyUri;
        this.cacheInMemory = cacheInMemory;
        this.width = width;
        this.height = height;
        this.config = config;
        this.displayer = displayer;
    }

    /**
     * 获得当URI为空的时候，显示的本地资源文件，如果返回 0 ，则表示不需要处理
     */
    public int getImageResForEmptyUri() {
        return imageResForEmptyUri;
    }

    /**
     * 该图片是否进行缓存到内存中
     */
    public boolean isCacheInMemory() {
        return cacheInMemory;
    }

    /**
     * 该图片需要被渲染的大小, 不能<=0
     */
    public int getWidth() {
        return width;
    }

    /**
     * 该图片需要被渲染的大小, 不能<=0
     */
    public int getHeight() {
        return height;
    }

    /**
     * 图片的质量
     */
    public Bitmap.Config getConfig() {
        return config;
    }

    /**
     * 获得图片本次展示的显示器
     */
    public BitmapDisplayer getDisplayer() {
        return displayer;
    }

    /**
     * 构造类
     */
    public static class Builder {
        //上下文
        Context context;
        //加载的时候, 显示的图片
        //int imageResOnLoading = 0;
        //URI为空的时候, 显示的图片
        int imageResForEmptyUri;
        //加载失败的时候, 显示的图片
        //int imageResOnFail = 0;
        //是否保存到内存中
        boolean cacheInMemory;
        //图片大小
        int width;
        //图片大小
        int height;
        //默认图片质量
        Bitmap.Config config;
        //展示器
        BitmapDisplayer displayer;

        public Builder(Context context) {
            this.context = context;
            this.imageResForEmptyUri = 0;
            this.cacheInMemory = false;
            this.width = 0;
            this.height = 0;
            this.config = null;
            this.displayer = null;
        }

        /**
         * 构造
         */
        public DisplayImageOptions build() {
            //imageResForEmptyUri
            if (imageResForEmptyUri <= 0) {
                imageResForEmptyUri = 0;
            }
            if (width <= 0 || height <= 0) {
                //使用屏幕大小
                DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
                width = displayMetrics.widthPixels;
                height = displayMetrics.heightPixels;
            }
            if (config == null) {
                //选择质量最差的配置
                config = Bitmap.Config.RGB_565;
            }
            if (displayer == null) {
                //选择一个简单的适配器
                displayer = new SimpleBitmapDisplayer();
            }
            //创建一个对象
            return new DisplayImageOptions(imageResForEmptyUri, cacheInMemory, width, height, config, displayer);
        }

        /**
         * 设置当URI为空的时候，显示的本地资源图片
         */
        public Builder setImageResForEmptyUri(int imageResForEmptyUri) {
            this.imageResForEmptyUri = imageResForEmptyUri;
            return this;
        }

        /**
         * 本图片是否缓存到内存中
         */
        public Builder setCacheInMemory(boolean cacheInMemory) {
            this.cacheInMemory = cacheInMemory;
            return this;
        }

        /**
         * 设置图片大小, 不能<=0
         */
        public Builder setWidth(int width) {
            this.width = width;
            return this;
        }

        /**
         * 设置图片大小, 不能<=0
         */
        public Builder setHeight(int height) {
            this.height = height;
            return this;
        }

        /**
         * 设置图片的质量
         */
        public Builder setConfig(Bitmap.Config config) {
            this.config = config;
            return this;
        }

        /**
         * 设置图片的显示器
         */
        public Builder setDisplayer(BitmapDisplayer displayer) {
            this.displayer = displayer;
            return this;
        }


    }
}
